// 命名导入的方式(变量名一定要对应上)
// import {fn,num} from "./script/01 命名导入导出/a";

import * as moduleA from "./script/01 命名导入导出/a";

// 命名导入的时候还可以取别的名字
// import {fn as fnB,num as numB} from "./script/01 命名导入导出/b";

// 命名导入的批量模式
// import * as moduleB from "./script/01 命名导入导出/b";

// fn();

// fnB();
// console.log(moduleB);

// moduleB.fn();

// moduleA.fn();



// 默认导入

// 导入模块的名字由我们自己命名
// 综合导入，默认导入要写在前面
// import  moduleC,{count,status}  from "./script/02 默认导入导出/c";
// console.log(moduleC);
// console.log(count,status)

// 这样写不对，因为虽然这样写是可以的{default as moduleC}，但是这样写它就变成了一个命名导入，
// 然后结合使用的话第一个必须是默认导入
// import {default as moduleC},* as moduleC1  from "./script/02 默认导入导出/c";
// import moduleC,* as moduleC1  from "./script/02 默认导入导出/c";
// console.log(moduleC);
// // // // 这样写moduleC1就可以把export(命名导入)和export default(默认导入)里面的内容都打印出来
// console.log(moduleC1);

// 其实默认导入与命名导入的有联系的，原来的样子
// import  {default as moduleC} from "./script/02 默认导入导出/c";
// console.log(moduleC);
// import  moduleC from "./script/02.. 默认导入导出/c";

// 写法1
// console.log(moduleC);


// 写法2
// moduleC.fn();

// 写法3
// moduleC();

// 写法4
// console.log(moduleC);

// 写法5
// // console.log(new moduleC());
// let a = new moduleC();
// // console.log的时候里面需要有一个返回值
// console.log(a.sayHello());


// function fn(){
//     console.log(1)
// }
// 如果在里面不想写return，那么就要自己写fn(),不要写console.log
// fn()


// common.js

// const path = "./script/04 比较common.js与ES6/common";

// if(Math.random() > 0.5){
//     const {fn} = require(path);
// }

// () =>{
//     const {fn} = require("./script/04 比较common.js与ES6/common");
// }


// 错误的
// import存在一个提升，优先执行，它已经执行了，但是没有找到 
// import {num} from path;
// es6模块引入引出，只能写在最高的层级（不能放在代码块中）
// es6 import存在预解析的提升，会优先执行，无法用逻辑控制它，只要写了就执行，比写了的代码提前执行
// if(Math.random() > 0.5){
//     import {num} from "./script/04 比较common.js与ES6/es";
// }



// 导入的变量是值引用
// let {num , add} = require("./script/04 比较common.js与ES6/common");


// // 这里是引入的值,这个时候num已经被引入，
// // 就已经定死了，就是0，计算add++与那边也没有关系了
// console.log(num);//0
// add();//1,跟这里的num已经没有关系了
// console.log(num);//0

// // 重新赋值
// num = 20;
// console.log(num);//20


// // 这里add()了之后，add函数里面的num = 1; 外面的那个let num = 0也应该为1，
// // 但是因为存在什么缓存机制，使以现在结果还是0
// let {num:num1} = require("./script/04 比较common.js与ES6/common");
// console.log("num1:" + num1);//0,好像是因为什么缓存机制



// import * as esmodule from "./script/04 比较common.js与ES6/es";

// // 这里的num是es模块里面的一个映射，
// // 是有联系的，不在是值的关系，还有引入关系
// console.log(esmodule.num);//0
// esmodule.add();
// esmodule.add();
// console.log(esmodule.num);//2 


// 如下做法是错误的，不要试图在模块外部试图修改模块内的导出值
// 因为引入的num是和之前的num存在关系的，关系是单向的，
// 只能读es.js中的值，不能在模块外面改变，只能在es.js中去改变
// esmodule.num++;
// console.log(esmodule.num);


// 导入且执行
// // 预解析的提升，一般写在最上面
// import "./script/03 导入且执行/d";

// console.log(window.a);

// // 引入第三方模块
// const _ = require("lodash");
// console.log(_.random(true));//随机数

// import _lodash from "lodash";
// console.log(_lodash.random(true));

// import arr from "lodash/array";
// console.log(arr);

